diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-10-07 19:17:14 +0200 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-10-07 19:17:14 +0200 |
| commit | 66939bab93cdcb9b7732c45d7bc3b99b6951fe15 (patch) | |
| tree | ec6bc1631464410f8735da49e02e99abff0f3863 /src/routes/grocery/[id] | |
| parent | 6e5dcdb53cea4c3f082d01c937fe5fc1d580c45b (diff) | |
feat: promote a reference as the primary shown in lists
Add an is_primary flag to references; the promoted ref sorts first on the item page and is the one shown under the item in the list and catalog. Item page gets a star toggle per reference.
Diffstat (limited to 'src/routes/grocery/[id]')
| -rw-r--r-- | src/routes/grocery/[id]/+page.server.ts | 7 | ||||
| -rw-r--r-- | src/routes/grocery/[id]/+page.svelte | 37 |
2 files changed, 42 insertions, 2 deletions
diff --git a/src/routes/grocery/[id]/+page.server.ts b/src/routes/grocery/[id]/+page.server.ts index 656e19c..a4ad377 100644 --- a/src/routes/grocery/[id]/+page.server.ts +++ b/src/routes/grocery/[id]/+page.server.ts @@ -6,10 +6,11 @@ import { loadAll as loadCategories } from '$lib/server/services/categories'; import { loadForGrocery, add as addRef, + promote, deleteReference, } from '$lib/server/services/references'; import { updateGrocery, deleteGrocery } from '$lib/server/services/groceries'; -import { deleteByIdAction } from '$lib/server/services/grocery-actions'; +import { idAction } from '$lib/server/services/grocery-actions'; import { numericId, parseFormString, @@ -70,7 +71,9 @@ export const actions: Actions = { }, delete: ({ request }) => - deleteByIdAction(request, deleteReference, { type: 'delete' }), + idAction(request, deleteReference, { type: 'delete' }), + + promote: ({ request }) => idAction(request, promote, { type: 'promote' }), update: async ({ request, params }) => { const data = await request.formData(); diff --git a/src/routes/grocery/[id]/+page.svelte b/src/routes/grocery/[id]/+page.svelte index 027c079..1a9aac8 100644 --- a/src/routes/grocery/[id]/+page.svelte +++ b/src/routes/grocery/[id]/+page.svelte @@ -156,6 +156,9 @@ {#each data?.references ?? [] as ref (ref.id)} <Row variant="ref"> <div class="ref-info"> + {#if ref.isPrimary} + <span class="primary-badge" title="Référence principale">★</span> + {/if} <strong>{ref.reference}</strong> {#if ref.price} <span class="ref-detail" @@ -166,6 +169,16 @@ <span class="ref-detail">Note : {ref.qualityScore}/100</span> {/if} </div> + {#if !ref.isPrimary} + <button + type="submit" + class="promote-btn" + name="id" + value={ref.id} + formaction="?/promote" + aria-label="Définir comme référence principale">☆</button + > + {/if} <Button variant="ghost" name="id" value={ref.id} ariaLabel="Supprimer" >×</Button > @@ -226,6 +239,30 @@ font-weight: 500; } + .primary-badge { + color: var(--accent); + font-size: 0.875rem; + } + + .promote-btn { + flex-shrink: 0; + width: 2rem; + aspect-ratio: 1; + padding: 0; + background: transparent; + border: none; + color: var(--text-secondary); + font-size: 1.25rem; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + } + + .promote-btn:hover { + color: var(--accent); + } + .error { margin-top: -0.25rem; margin-bottom: 0.5rem; |
